package reflect.access;

import java.lang.reflect.Method;

/**
 * @version 1.0
 * @author:罗苏琴
 * @Date 2024/12/3 上午8:32
 */
public class AccessPersonMethods {
    public static void main(String[] args) {
        try {
            Class clz = Class.forName("reflect.entity.Person");
            // 注意：这里假设getAge是无参数的实例方法
            Method getAge = clz.getDeclaredMethod("getAge");
            getAge.setAccessible(true);
            // 需要一个Person实例来调用实例方法
            Object person = clz.getDeclaredConstructor().newInstance();
            Object returnAge = getAge.invoke(person, (Object[]) null); // 或者使用new Object[0]作为参数
            System.out.println("年龄是：" + returnAge);

            // 假设silentMethod是无参数的实例方法
            Method silentMethod = clz.getDeclaredMethod("silentMethod");
            silentMethod.setAccessible(true);
            silentMethod.invoke(person, (Object[]) null);

            // 调用setName方法，传递一个String参数
            Method setName = clz.getDeclaredMethod("setName", String.class);
            setName.invoke(person, "New Person");

            // 调用getName方法，它应该是无参数的
            Method getName = clz.getDeclaredMethod("getName");
            Object returnName = getName.invoke(person);
            System.out.println("刚才设定的name是：" + returnName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
